package com.ijiangtao.studevtech.demo.csv.day.DT20170501.model;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.supercsv.cellprocessor.CellProcessorAdaptor;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.ParseDate;
import org.supercsv.cellprocessor.ParseInt;
import org.supercsv.cellprocessor.constraint.StrMinMax;
import org.supercsv.cellprocessor.constraint.Unique;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.cellprocessor.ift.DateCellProcessor;
import org.supercsv.util.CsvContext;

import com.ijiangtao.studevtech.demo.csv.day.DT20170501.util.CsvBean;

public class User extends CsvBean{
	
	private String username, password;
	private Date date;
	private int zip;
	private String town;

	private boolean isProcessed=false;
	
	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public String getPassword() {
		return password;
	}


	public void setPassword(String password) {
		this.password = password;
	}


	public Date getDate() {
		return date;
	}


	public void setDate(Date date) {
		this.date = date;
	}


	public int getZip() {
		return zip;
	}


	public void setZip(int zip) {
		this.zip = zip;
	}


	public String getTown() {
		return town;
	}


	public void setTown(String town) {
		this.town = town;
	}


	public boolean getIsProcessed() {
		return isProcessed;
	}

	public void setIsProcessed(boolean isProcessed) {
		this.isProcessed = isProcessed;
	}

	SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");
	/*
	 * 第一列是一个字符串，并且值是唯一的，长度为1到20 
	 * 第二列是一个字符串，长度是1到35
	 * 第三列为一个日期类型，格式为天/月/年（day/month/year）
	 * 第四列是一个整型数字，但只有这列有值的时候ParseInt处理器才会去处理这个值（该列可以为空） 
	 * 第五列为一个字符串（默认），不使用处理器
	 */
	public final static CellProcessor[] READ_PROCESSOR = new CellProcessor[] { 
			new Unique(new StrMinMax(1, 20)), // 1
			new StrMinMax(1, 35), // 2
			new ParseDate("dd/MM/yyyy"), // 3
			new Optional(new ParseInt()), // 4
			null// 5
	};
	

	/*
	 * 第一列是一个字符串，并且值是唯一的，长度为1到20 
	 * 第二列为一个字符串（默认），不使用处理器
	 * 第三列为一个日期类型，格式为天/月/年（day/month/year）
	 * 第四列是一个整型数字，但只有这列有值的时候ParseInt处理器才会去处理这个值（该列可以为空）
	 * 第五列为一个字符串（默认），不使用处理器
	 * 第六列为一个字符串（默认），不使用处理器
	 */
	public final static CellProcessor[] WRITE_PROCESSOR = new CellProcessor[] { 
			new Unique(new StrMinMax(1, 20)), //限制当前字段不能重复 1
			null, // 2
			new DateCellProcessor() {
				/**
				 * 格式化输出的日期
				 * @param value 当前Cell的值
				 * @param context This object represents the current context of a given CSV file being either read or written to.
				 * @return 输出在此Cell的值
				 */
				@Override
				public String execute(Object value, CsvContext context) {
					SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");
					return formater.format(value); 
				}
			},
			new Optional(new ParseInt()), //4 Constructs a new Optional processor, which when encountering null will return null , for all other values it will call the next processor in the chain.
			null,// 5
			null // 6
	};
	
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", date=" + formater.format(date) + ", zip=" + zip + ", town="
				+ town + ", isProcessed=" + isProcessed + "]";
	}
	
	
}
